% Copyright 2012 Beatrice Florat, beatrice.florat <at> googlemail <dot> com

% This file is part of Einfacher Chunk Parser.

% Einfacher Chunk Parser is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version.

% Einfacher Chunk Parser is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
% GNU General Public License for more details.

% You should have received a copy of the GNU General Public License
% along with Einfacher Chunk Parser. If not, see <http://www.gnu.org/licenses/>.


:- discontiguous rule/2.
:- discontiguous word/2.

%% -----------------------------------------------------------------------------
%% Prepositional Phrase
%% -----------------------------------------------------------------------------

% Regeln
rule( chunk,    [ pp ] ).

rule( pp,       [ p1, np, p2 ] ).
rule( pp,       [ p, np ] ).
rule( pp,       [ np, p, np ] ).


% Lexikon
word( p, a).               word( p, ab).              word( p, abseits).
word( p, abzueglich).      word( p, am).              word( p, an).
word( p, angesichts).      word( p, anhand).          word( p, anlaesslich).
word( p, ans).             word( p, anstatt).         word( p, anstelle).
word( p, auf).             word( p, aufgrund).        word( p, aufs).
word( p, aufseiten).       word( p, aus).             word( p, ausgangs).
word( p, ausschliesslich). word( p, ausser).          word( p, ausserhalb).
word( p, ausweislich).
word( p, behufs).          word( p, bei).             word( p, beiderseits).
word( p, beidseits).       word( p, beim).            word( p, betreffend).
word( p, betreffs).        word( p, bezueglich).      word( p, binnen).
word( p, bis).
word( p, dank).            word( p, diesseits).       word( p, durch).
word( p, durchs).
word( p, eingangs).        word( p, eingedenk).       word( p, einschliesslich).
word( p, entgegen).        word( p, entlang).         word( p, entsprechend).
word( p, ex).              word( p, exklusiv).        word( p, exklusive).
word( p, fern).            word( p, fernab).          word( p, fuer).
word( p, fuers).
word( p, gegen).           word( p, gegenueber).      word( p, gemaess).
word( p, halber).          word( p, hinsichtlich).    word( p, hinter).
word( p, hinterm).         word( p, hinters).
word( p, im).              word( p, in).              word( p, infolge).
word( p, inklusiv).        word( p, inklusive).       word( p, inmitten).
word( p, innerhalb).       word( p, innert).          word( p, ins).
word( p, inter).
word( p, je).              word( p, jenseits).
word( p, kraft).           word( p, kontra).
word( p, laengs).          word( p, laengsseits).     word( p, laut).
word( p, mangels).         word( p, minus).           word( p, mit).
word( p, mithilfe).        word( p, mitsamt).         word( p, mittels).
word( p, nach).            word( p, nahe).            word( p, namens).
word( p, neben).           word( p, nebst).
word( p, ob).              word( p, oberhalb).        word( p, ohne).
word( p, per).             word( p, plus).            word( p, pro).
word( p, punkto).
word( p, ruecksichtlich).
word( p, samt).            word( p, seit).            word( p, seitens).
word( p, seitlich).        word( p, statt).
word( p, trotz).
word( p, ueber).           word( p, ueberm).          word( p, uebern).
word( p, uebers).          word( p, um).              word( p, ums).
word( p, uneingedenk).     word( p, unfern).          word( p, ungeachtet).
word( p, unter).           word( p, unterhalb).       word( p, unterm).
word( p, untern).          word( p, unters).          word( p, unweit).
word( p, vermittels).      word( p, vermittelst).     word( p, versus).
word( p, via).             word( p, vis-a-vis).       word( p, vom).
word( p, von).             word( p, vonseiten).       word( p, vor).
word( p, vorbehaltlich).   word( p, vorbehaeltlich).  word( p, vorm).
word( p, vors).
word( p, waehrend).        word( p, wegen).           word( p, weitab).
word( p, wider).
word( p, zu).              word( p, zufolge).         word( p, zugunsten).
word( p, zuhanden).        word( p, zulasten).        word( p, zuliebe).
word( p, zum).             word( p, zur).             word( p, zuseiten).
word( p, zuungunsten).     word( p, zuzueglich).      word( p, zwecks).
word( p, zwischen).

word( p1, um).             word( p2, willen).
word( p1, von).            word( p2, an).

%% -----------------------------------------------------------------------------
%% Noun Phrase
%% -----------------------------------------------------------------------------

% Regeln
rule( chunk,    [ np ] ).

rule( np,       [ [d], [adjp], [adjp], [adjp], n, konjp,
                  [d], [adjp], [adjp], [adjp], n ]).
rule( np,       [ [d], [adjp], [adjp], [adjp], n ] ).
rule( np,       [ namen, konjp, namen ] ).
rule( np,       [ [d], namen ] ).
rule( np,       [ pronoun, konjp, pronoun ] ).
rule( np,       [ pronoun ] ).


% ARTIKEL
% *******

rule( d,       [ def ] ).    % definite Artikel
rule( d,       [ indef ] ).  % indefinite Artikel und Indefinitartikel
rule( d,       [ demon ] ).  % Demonstrativartikel
rule( d,       [ poss ] ).   % Possessivartikel

% definiter Artikel
word( def, der).      word( def, des).       word( def, dem).    
word( def, den).      word( def, die).       word( def, das).

% indefiniter Artikel
word( indef, ein).    word( indef, eines).   word( indef, einem).
word( indef, einen).  word( indef, eine).    word( indef, einer).
word( indef, einige). word( indef, einiger). word( indef, einigen).

% Possessivartikel
word( poss, mein).    word( poss, meine).    word( poss, meinem).
word( poss, meinen).  word( poss, meines).   word( poss, meiner).
word( poss, dein).    word( poss, deine).    word( poss, deinem).
word( poss, deinen).  word( poss, deines).   word( poss, deiner).
word( poss, ihr).     word( poss, ihre).     word( poss, ihrem).
word( poss, ihren).   word( poss, ihres).    word( poss, ihrer).
word( poss, sein).    word( poss, seine).    word( poss, seinem).
word( poss, seinen).  word( poss, seines).   word( poss, seiner).
word( poss, unser).   word( poss, unsere).   word( poss, unserem).
word( poss, unseren). word( poss, unseres).  word( poss, unserer).
word( poss, euer).    word( poss, eure).     word( poss, eurem).
word( poss, euren).   word( poss, eures).    word( poss, eurer).

% Demonstrativartikel
word( demon, dieser).     word( demon, dieses).     word( demon, diesem).
word( demon, diesen).     word( demon, diese).      word( demon, dies).
word( demon, jener).      word( demon, jenes).      word( demon, jenem).
word( demon, jenen).
word( demon, derselbe).   word( demon, desselben).  word( demon, demselben).
word( demon, denselben).  word( demon, dieselbe).   word( demon, derselben).
word( demon, dasselbe).   word( demon, dieselben).
word( demon, derjenige).  word( demon, desjenigen). word( demon, demjenigen).
word( demon, denjenigen). word( demon, diejenige).  word( demon, derjenigen).
word( demon, dasjenige).  word( demon, diejenigen).

% Indefinitartikel
word( indef, aller).      word( indef, alles).      word( indef, allem).
word( indef, allen).      word( indef, alle).
word( indef, anderer).    word( indef, anderen).    word( indef, anderem).
word( indef, andere).     word( indef, anderes).
word( indef, einiger).    word( indef, einigen).    word( indef, einigem).
word( indef, einige).     word( indef, einiges).
word( indef, etlicher).   word( indef, etlichen).   word( indef, etlichem).
word( indef, etliche).    word( indef, etliches).
word( indef, jeder).      word( indef, jedes).      word( indef, jedem).
word( indef, jeden).      word( indef, jede).
word( indef, mancher).    word( indef, manches).    word( indef, manchem).
word( indef, manchen).    word( indef, manche).
word( indef, mehrere).    word( indef, mehrerer).   word( indef, mehreren).


% PRONOMEN
% ********

rule( pronoun, [ personal ] ).  % Personalpronomen
rule( pronoun, [ demo ] ).      % Demonstrativpronomen
rule( pronoun, [ reflex ] ).    % Reflexivpronomen
rule( pronoun, [ rezi ] ).      % Reziprokpronomen
rule( pronoun, [ possess ] ).   % Possessivpronomen
rule( pronoun, [ indefin ] ).   % Indefinitpronomen


% Personalpronomen
word( personal, ich).    word( personal, du).    word( personal, er).
word( personal, sie).    word( personal, es).    word( personal, wir).
word( personal, ihr).
word( personal, mich).   word( personal, dich).  word( personal, ihn).
word( personal, uns).    word( personal, euch).
word( personal, mir).    word( personal, dir).   word( personal, ihm).
word( personal, ihnen).

% Demonstrativpronomen
word( demo, der).         word( demo, dessen).      word( demo, dem). 
word( demo, den).         word( demo, die).         word( demo, deren).    
word( demo, das).         word( demo, derer).       word( demo, denen).
word( demo, dieser).      word( demo, dieses).      word( demo, diesem).
word( demo, diesen).      word( demo, diese).       word( demo, dies).
word( demo, dieses).
word( demo, jener).       word( demo, jenes).       word( demo, jenem).
word( demo, jenen).       word( demo, jene).
word( demo, derjenige).   word( demo, desjenigen).  word( demo, demjenigen).
word( demo, denjenigen).  word( demo, diejenige).   word( demo, derjenigen).
word( demo, dasjenige).   word( demo, diejenigen).
word( demo, derselbe).    word( demo, desselben).   word( demo, demselben).
word( demo, denselben).   word( demo, dieselbe).    word( demo, derselben).
word( demo, dasselbe).    word( demo, dieselben).

% Reflexivpronomen
word( reflex, sich).      word( reflex, meiner).    word( reflex, deiner).
word( reflex, seiner).    word( reflex, ihrer).     word( reflex, unser).
word( reflex, euer).

% Reziprokpronomen
word( rezi, einander).

% Possessivpronomen
word( possess, meine).    word( possess, meins).    word( possess, meines).
word( possess, deine).    word( possess, deins).    word( possess, deines).
word( possess, seine).    word( possess, seins).    word( possess, seines).
word( possess, ihre).     word( possess, ihrs).     word( possess, ihres).
word( possess, unserer).  word( possess, unsere).   word( possess, unseres).
word( possess, eurer).    word( possess, eure).     word( possess, eures).

% Indefinitpronomen
word( indefin, man).
word( indefin, einem).   word( indefin, einen).
word( indefin, jemand).  word( indefin, jemandem).    word( indefin, jemanden).
word( indefin, irgendjemand).   word( indefin, irgendjemandem).
word( indefin, irgendjemanden).
word( indefin, niemand). word( indefin, niemandem).   word( indefin, niemanden).
word( indefin, etwas).   word( indefin, irgendetwas). word( indefin, was).
word( indefin, bisschen).
word( indefin, wenig).
word( indefin, nichts).
word( indefin, welcher). word( indefin, welchen).  word( indefin, welche).
word( indefin, welches).
word( indefin, aller).   word( indefin, allen).    word( indefin, allem).
word( indefin, alle).    word( indefin, alles).
word( indefin, einiger). word( indefin, einigen).  word( indefin, einigem).
word( indefin, einige).  word( indefin, einiges).
word( indefin, jeder).   word( indefin, jedes).    word( indefin, jedem).
word( indefin, jeden).   word( indefin, jede).
word( indefin, einer).   word( indefin, eines).    word( indefin, einem).
word( indefin, einen).   word( indefin, eine).     word( indefin, eins).
word( indefin, keiner).  word( indefin, keines).   word( indefin, keinem).
word( indefin, keinen).  word( indefin, keine).    word( indefin, keins).
word( indefin, mancher). word( indefin, manches).  word( indefin, manchem).
word( indefin, manchen). word( indefin, manche).
word( indefin, mehrere). word( indefin, mehrerer). word( indefin, mehreren).
word( indefin, anderer). word( indefin, anderen).  word( indefin, anderem).
word( indefin, andere).  word( indefin, anderes).
word( indefin, beides).  word( indefin, beidem).


% ADJEKTIVPHRASE
% **************

rule( chunk,    [ adjp ] ).

rule( adjp,     [ [degree], adj, konjp, [degree], adj] ).
rule( adjp,     [ [degree], adj] ).
rule( adjp,     [ adj ] ).

% fuer den Superlativ
word( degree, am).

% Steigerungspartikel
word( degree, D) :-
   word( partikel, D).

% unregelmaeßige Komparation
komparation(nah).    komparation(naeher).   komparation(naechsten).
komparation(gross).  komparation(groesser). komparation(groessten).
komparation(dunkel). komparation(dunkler).  komparation(dunkelsten).
komparation(gut).    komparation(besser).   komparation(besten).

% Adjektive ohne Komparationsformen
komparation(einzig).
komparation(schwarz).

% regelmaessige Komparation
adjektiv(breit).
adjektiv(eckig).
adjektiv(flach).        adjektiv(frueh).
adjektiv(glatt).
adjektiv(heiss).
adjektiv(hell).
adjektiv(klein).
adjektiv(laut).         adjektiv(leise).
adjektiv(schoen).       adjektiv(suess).
adjektiv(tief).


% Adjektive
word(adj, Adj) :- komparation(Adj).

word(adj, Adj) :- adjektiv(Adj).


% Deklination von Adjektivien
word(adj, Adj) :-
   adjektiv(Wort),
   adjektiv_endungen(Wort, Adj).

% Deklinationen von vorgebenen Komparationsformen
word(adj, Adj) :-
   komparation(Wort),
   adjektiv_endungen(Wort, Adj).

% Deklinationsendungen  
adjektiv_endungen(Wort, Adj) :- atom_concat(Wort, er, Adj).
adjektiv_endungen(Wort, Adj) :- atom_concat(Wort, en, Adj).
adjektiv_endungen(Wort, Adj) :- atom_concat(Wort, em, Adj).
adjektiv_endungen(Wort, Adj) :- atom_concat(Wort, e,  Adj).
adjektiv_endungen(Wort, Adj) :- atom_concat(Wort, es, Adj).

% Komparation von Adjektivien
word(adj, Adj) :-
   adjektiv(Wort),
   komp_endungen(Wort, Adj).

% Komparationsendungen
komp_endungen(Wort, Adj) :- atom_concat(Wort, ere,   Adj).
komp_endungen(Wort, Adj) :- atom_concat(Wort, eren,  Adj).
komp_endungen(Wort, Adj) :- atom_concat(Wort, erem,  Adj).
komp_endungen(Wort, Adj) :- atom_concat(Wort, eres,  Adj).
komp_endungen(Wort, Adj) :- atom_concat(Wort, ste,   Adj).
komp_endungen(Wort, Adj) :- atom_concat(Wort, sten,  Adj).
komp_endungen(Wort, Adj) :- atom_concat(Wort, stem,  Adj).
komp_endungen(Wort, Adj) :- atom_concat(Wort, stes,  Adj).
komp_endungen(Wort, Adj) :- atom_concat(Wort, esten, Adj).
komp_endungen(Wort, Adj) :- atom_concat(Wort, este,  Adj).



% NOMEN
% *****

nomen(hund).
nomen(kaffee).      nomen(kaffeemaschine).
nomen(lehrer).
nomen(mensch).
nomen(zigarette).

% Jahreszeiten
nomen(fruehling). nomen(sommer).
nomen(herbst).    nomen(winter).

% Zeit
nomen(jahr).      nomen(monat).     nomen(woche).     nomen(wochenende).
nomen(tag).       nomen(stunde).    nomen(minute).    nomen(sekunde).

% Relationen
nomen(bruder).
nomen(ehefrau).      nomen(ehemann).     nomen(ehepaar).
nomen(enkel).        nomen(enkelin).
nomen(familie).      
nomen(freund).       nomen(freundin).
nomen(geschwister).  nomen(grossmutter). nomen(grossvater).
nomen(junge).
nomen(maedchen).     nomen(mutter).
nomen(oma).          nomen(onkel).       nomen(opa).
nomen(papa).
nomen(schwester).    nomen(sohn).
nomen(tante).
% nomen(tochter).    
nomen(vater).

word(n, Nomen) :- nomen(Nomen).


% unregelmaessiger Plural
word(n, buch).       word(n, buecher).   
word(n, buches).  % Genitivform
word(n, haus).       word(n, haeuser).
word(n, hauses).  % Genitivform

% ohne Plural
word(n, einmaleins).


% Komposition von Nomen

% word( n, -NN) :-
%   setzt zwei Nomen zusammen bzw. ueberprueft, ob die Woerter 
%   der Zusammensetzung in der Datenbasis vorhanden sind

word( n, NN ) :-
   nomen(Nomen1), nomen(Nomen2), Nomen1 \= Nomen2,
   atom_concat(Nomen1, Nomen2, NN).


% word( n, -NsN) :-
%   setzt zwei Nomen aneinander mit Fugen-s

% word( n, -NsN) :-
%    nomen(Nomen1), nomen(Nomen2), Nomen1 \= Nomen2,
%    atom_concat(Nomen1,s,Ns), atom_concat(Ns,Nomen2,NsN).


% word(n, -NNN) :-
%   setzt 3 Nomen aneinander

% word( n, NNN ) :-
%    nomen(Nomen1), nomen(Nomen2), Nomen1 \= Nomen2,
%    nomen(Nomen3), Nomen3 \= Nomen2, Nomen3 \= Nomen1,
%    atom_concat(Nomen1, Nomen2, NN), atom_concat(NN, Nomen3, NNN).
   

% Plural- und Genitivbildung von Nomen
word( n, Plural ) :-
   nomen(Nomen), 
   nomen_endung(Nomen, Plural).

% Plural- und Genitivendungen   
nomen_endung(Nomen,Plural) :- atom_concat(Nomen, e,   Plural).
nomen_endung(Nomen,Plural) :- atom_concat(Nomen, n,   Plural).
nomen_endung(Nomen,Plural) :- atom_concat(Nomen, s,   Plural).
nomen_endung(Nomen,Plural) :- atom_concat(Nomen, en,  Plural).
nomen_endung(Nomen,Plural) :- atom_concat(Nomen, er,  Plural).
nomen_endung(Nomen,Plural) :- atom_concat(Nomen, se,  Plural).
nomen_endung(Nomen,Plural) :- atom_concat(Nomen, nen, Plural).
nomen_endung(Nomen,Plural) :- atom_concat(Nomen, es,  Plural).


% EIGENNAMEN
% **********
% Regeln
rule( namen, [ first_name, [last_name] ] ).
rule( namen, [ last_name ] ).
rule( namen, [ appellativ ]).

% Lexikon
first_name(john).
first_name(jane).

last_name(doe).

% Vornamen
word( first_name, FN) :- first_name(FN).

% Nachnamen
word( last_name, LN)  :- last_name(LN).


% Genitivbildung

word( first_name, Genitiv ) :-
   first_name(Name),
   atom_concat(Name, s, Genitiv).

word( last_name, Genitiv ) :-
   last_name(Name),
   atom_concat(Name, s, Genitiv).


% Appellative

word( appellativ, katze ).


%% -----------------------------------------------------------------------------
%% Verb Phrase
%% -----------------------------------------------------------------------------

% Regeln
rule( chunk,   [ vp ]).
rule( vp,      [ infinit ]).
rule( vp,      [ v, [ infinit ] ]).
rule( vp,      [ v, [ verbpartikel ] ]).
rule( vp,      [ verbpartikel ]).

rule( infinit, [ [ verbpraeposition ], inf ]).  % (zu) + Infinitvform
rule( infinit, [ partizip ]).


% Verbpartikel - seperable prefixes
word( verbpartikel, ab).          word( verbpartikel, an).
word( verbpartikel, auf).         word( verbpartikel, aus).
word( verbpartikel, bei).         word( verbpartikel, beisammen).
word( verbpartikel, da).          word( verbpartikel, dabei).
word( verbpartikel, dafuer).      word( verbpartikel, dagegen).
word( verbpartikel, daher).       word( verbpartikel, dahin).
word( verbpartikel, daneben).     word( verbpartikel, danieder).
word( verbpartikel, dar).         word( verbpartikel, daran).
word( verbpartikel, darein).      word( verbpartikel, darnieder).
word( verbpartikel, darum).       word( verbpartikel, davon).
word( verbpartikel, dawider).     word( verbpartikel, dazu).
word( verbpartikel, dazwischen).  word( verbpartikel, dran).
word( verbpartikel, drauf).       word( verbpartikel, drauflos).
word( verbpartikel, drin).        word( verbpartikel, durch).
word( verbpartikel, ein).         word( verbpartikel, einher).
word( verbpartikel, empor).       word( verbpartikel, entgegen).
word( verbpartikel, entlang).     word( verbpartikel, entzwei).
word( verbpartikel, fehl).        word( verbpartikel, fest).
word( verbpartikel, fort).        word( verbpartikel, frei).
word( verbpartikel, gegen).       word( verbpartikel, gegenueber).
word( verbpartikel, gleich).
word( verbpartikel, heim).        word( verbpartikel, her).
word( verbpartikel, herab).       word( verbpartikel, heran).
word( verbpartikel, herauf).      word( verbpartikel, heraus).
word( verbpartikel, herbei).      word( verbpartikel, herein).
word( verbpartikel, hernieder).   word( verbpartikel, herueber).
word( verbpartikel, herum).       word( verbpartikel, herunter).
word( verbpartikel, hervor).      word( verbpartikel, herzu).
word( verbpartikel, hin).         word( verbpartikel, hinab).
word( verbpartikel, hinan).       word( verbpartikel, hinauf).
word( verbpartikel, hinaus).      word( verbpartikel, hindurch).
word( verbpartikel, hinein).      word( verbpartikel, hintan).
word( verbpartikel, hintenueber). word( verbpartikel, hinter).
word( verbpartikel, hinterher).   word( verbpartikel, hinueber).
word( verbpartikel, hinunter).    word( verbpartikel, hinweg).
word( verbpartikel, hinzu).
word( verbpartikel, inne).
word( verbpartikel, los).         word( verbpartikel, lang).
word( verbpartikel, mit).
word( verbpartikel, nach).        word( verbpartikel, nieder).
word( verbpartikel, preis).
word( verbpartikel, stand).       word( verbpartikel, statt).
word( verbpartikel, teil).
word( verbpartikel, ueber).       word( verbpartikel, ueberein).
word( verbpartikel, um).          word( verbpartikel, umher).
word( verbpartikel, umhin).       word( verbpartikel, unter).
word( verbpartikel, vor).         word( verbpartikel, voran).
word( verbpartikel, vorauf).      word( verbpartikel, voraus).
word( verbpartikel, vorbei).      word( verbpartikel, vorher).
word( verbpartikel, vorueber).    word( verbpartikel, vorweg).
word( verbpartikel, weg).         word( verbpartikel, weiter).
word( verbpartikel, wider).       word( verbpartikel, wieder).
word( verbpartikel, zu).          word( verbpartikel, zurecht).
word( verbpartikel, zurueck).     word( verbpartikel, zuvor).
word( verbpartikel, zusammen).    word( verbpartikel, zuwider).
word( verbpartikel, zwischen).


% Verbpraefix - inseperable prefixes
praefix(be).
praefix(durch).
praefix(emp).    praefix(ent).   praefix(er).
praefix(ge).
praefix(hinter).
praefix(miss).
praefix(ueber).  praefix(um).    praefix(unter).
praefix(ver).    praefix(voll).
praefix(wider).  praefix(wieder).
praefix(zer).

% regelmaessige Verben auf -en
verb(antworten).  verb(arbeiten).   verb(atmen).
verb(beginnen).   verb(bekommen).   verb(benutzen).   verb(besuchen).
verb(bezahlen).   verb(bleiben).    verb(brauchen).   
verb(daueren).    verb(danken).     verb(denken).
verb(entdecken).  verb(erfinden).   verb(ergaenzen).  verb(erlauben).
verb(erzaehlen).  verb(essen).
verb(finden).     verb(fischen).    verb(fliegen).    verb(fragen).
verb(gehen).      verb(gewinnen).   verb(glauben).    verb(gruenden).
verb(gehoeren).
verb(helfen).
verb(kaufen).     verb(kennen).     verb(kochen).     verb(kommen).
verb(laufen).     verb(lehren).     verb(lernen).     verb(lieben).
verb(liegen).
verb(machen).
verb(passieren).
verb(rauchen).    verb(rechnen).    verb(reden).      verb(reisen).
verb(rennen).     verb(rufen).
verb(sagen).      verb(schlafen).   verb(schreiben).  verb(schwimmen).
verb(sehen).      verb(singen).     verb(sitzen).     verb(sparen).
verb(stecken).    verb(stehen).     verb(studieren).  verb(suchen).
verb(stellen).
verb(tanzen).     verb(treffen).    verb(trennen).    verb(trinken).
verb(verdienen).  verb(vergessen).  verb(verlieren).  verb(versprechen).
verb(verstehen).
verb(wappnen).    verb(warten).     verb(waschen).    verb(winken).
verb(wischen).    verb(wuenschen).
verb(ziehen).

% regelmaessige Verben auf -eln
verb(klingeln).

% regelmaessige Verben auf -ern
verb(aendern).

% regelmaessige Verben auf -ien
verb(knien).


% Infinitivform

word( inf, Infinitiv) :- infinitiv(Infinitiv).

infinitiv(Infinitiv) :- verb(Infinitiv).

% Praefix + Infinitiv = Infinitv
infinitiv(PraeInf) :-
   verb(Infinitiv),
   praefix(Praefix),
   atom_concat(Praefix, Infinitiv, PraeInf).

% Verbpartikel + Infinitiv = Infinitiv
infinitiv(PartInf) :-
   verb(Infinitiv),
   word(verbpartikel, Partikel),
   atom_concat(Partikel, Infinitiv, PartInf).


% Verbpraeposition
word( verbpraeposition, zu).


% regelmaessige Verben im Aktiv - Praesens - Indikativ

% Verben mit Infinitiv-Endung -en
word( v, Verb) :-
   infinitiv(Infinitiv),
   atom_concat(Stamm, en, Infinitiv),
   verb_en_endung(Stamm, Verb).

% Verben mit Infinitiv-Endung -eln
word( v, Verb) :-
   infinitiv(Infinitiv),
   atom_concat(Stamm, eln, Infinitiv),
   verb_eln_endung(Stamm, Verb).

% Verben mit Infinitiv-Endung -ern
word( v, Verb) :-
   infinitiv(Infinitiv),
   atom_concat(Stamm, ern, Infinitiv),
   verb_ern_endung(Stamm, Verb).
   
% Verben mit Infinitiv-Endung -ien
word( v, Verb) :-
   infinitiv(Infinitiv),
   atom_concat(Stamm, ien, Infinitiv),
   verb_ien_endung(Stamm, Verb).


% Verben mit Infinitiv-Endung -en
verb_en_endung(Stamm,Verb) :- atom_concat(Stamm, e,   Verb).
verb_en_endung(Stamm,Verb) :- atom_concat(Stamm, est, Verb).
verb_en_endung(Stamm,Verb) :- atom_concat(Stamm, st,  Verb).
verb_en_endung(Stamm,Verb) :- atom_concat(Stamm, et,  Verb).
verb_en_endung(Stamm,Verb) :- atom_concat(Stamm, t,   Verb).
verb_en_endung(Stamm,Verb) :- atom_concat(Stamm, en,  Verb).

% Verben mit Infinitiv-Endung -eln
verb_eln_endung(Stamm,Verb) :- atom_concat(Stamm, le,   Verb).
verb_eln_endung(Stamm,Verb) :- atom_concat(Stamm, elst, Verb).
verb_eln_endung(Stamm,Verb) :- atom_concat(Stamm, lest, Verb).
verb_eln_endung(Stamm,Verb) :- atom_concat(Stamm, elt,  Verb).
verb_eln_endung(Stamm,Verb) :- atom_concat(Stamm, eln,  Verb).
verb_eln_endung(Stamm,Verb) :- atom_concat(Stamm, let,  Verb).

% Verben mit Infinitiv-Endung -ern
verb_ern_endung(Stamm,Verb) :- atom_concat(Stamm, ere,  Verb).
verb_ern_endung(Stamm,Verb) :- atom_concat(Stamm, erst, Verb).
verb_ern_endung(Stamm,Verb) :- atom_concat(Stamm, rest, Verb).
verb_ern_endung(Stamm,Verb) :- atom_concat(Stamm, re,   Verb).
verb_ern_endung(Stamm,Verb) :- atom_concat(Stamm, ert,  Verb).
verb_ern_endung(Stamm,Verb) :- atom_concat(Stamm, ern,  Verb).
verb_ern_endung(Stamm,Verb) :- atom_concat(Stamm, ret,  Verb).

% Verben mit Infinitiv-Endung -ien
verb_ien_endung(Stamm,Verb) :- atom_concat(Stamm, ie,   Verb).
verb_ien_endung(Stamm,Verb) :- atom_concat(Stamm, iest, Verb).
verb_ien_endung(Stamm,Verb) :- atom_concat(Stamm, iet,  Verb).
verb_ien_endung(Stamm,Verb) :- atom_concat(Stamm, ien,  Verb).


% unregelmaessige Verben

word( inf, sein).
word( inf, haben).
word( inf, werden).
word( inf, wissen).
word( inf, bringen).
word( inf, denken).
word( inf, kennen).
word( inf, rennen).
word( inf, sprechen).
word( inf, geben).
 

% Modalverben

modal(duerfen).
modal(koennen).
modal(moegen).
modal(muessen).
modal(sollen).
modal(wollen).

word( inf, Infinitiv) :-
   modal(Infinitiv).


% finite Formen von unregelmaessigen Verben

word( v, Finitiv) :-
   unregel(_,Finitiv).

word( v, Finitiv) :-
   praeteritum(_,Finitiv). 


% Praesens

unregel(sein, bin).    unregel(sein, bist).    unregel(sein, ist).
unregel(sein, sind).   unregel(sein, seid).    unregel(sein, sei).
unregel(sein, seiest). unregel(sein, seist).   unregel(sein, seien).
unregel(sein, seiet).
unregel(sein, seid).    % Imperativ

unregel(haben, habe).    unregel(haben, hast).     unregel(haben, hat).
unregel(haben, haben).   unregel(haben, habt).     unregel(haben, habest).
unregel(haben, habet).
unregel(haben, hab).     % Imperativ

unregel(werden, werde).   unregel(werden, wirst).    unregel(werden, wird).
unregel(werden, werden).  unregel(werden, werdet).   unregel(werden, werdest).
unregel(werden, worden).
unregel(werden, werd).     % Imperativ

unregel(duerfen, darf).     unregel(duerfen, darfst).
unregel(duerfen, duerfen).  unregel(duerfen, duerft).
unregel(duerfen, duerfe).   unregel(duerfen, duerfest).
unregel(duerfen, duerfen).  unregel(duerfen, duerfet).

unregel(koennen, kann).     unregel(koennen, kannst).
unregel(koennen, koennen).  unregel(koennen, koennt).
unregel(koennen, koenne).   unregel(koennen, koennest).
unregel(koennen, koennet).

unregel(moegen, mag).      unregel(moegen, magst).    unregel(moegen, moegen).
unregel(moegen, moegt).    unregel(moegen, moege).    unregel(moegen, moegest).
unregel(moegen, moeget).

unregel(muessen, muss).      unregel(muessen, musst).
unregel(muessen, muessen).   unregel(muessen, muesst).
unregel(muessen, muesse).    unregel(muessen, muessest).
unregel(muessen, muesset).

unregel(sollen, soll).   unregel(sollen, sollst).   unregel(sollen, sollen).
unregel(sollen, sollt).  unregel(sollen, solle).    unregel(sollen, sollest).
unregel(sollen, sollet).

unregel(wollen, will).   unregel(wollen, willst).   unregel(wollen, wollen).
unregel(wollen, wollt).  unregel(wollen, wolle).    unregel(wollen, wollest).
unregel(wollen, wollet).

unregel(wissen, weiss).    unregel(wissen, weisst).   unregel(wissen, wissen).
unregel(wissen, wisst).    unregel(wissen, wisse).    unregel(wissen, wissest).
unregel(wissen, wisset).

unregel(bringen, bringe).  unregel(bringen, bringst).  unregel(bringen, bringt).
unregel(bringen, bringen).

unregel(denken, denke).    unregel(denken, denkst).    unregel(denken, denkt).
unregel(denken, denken).

unregel(kennen, kenne).    unregel(kennen, kennst).    unregel(kennen, kennt).
unregel(kennen, kennen).


unregel(rennen, renne).    unregel(rennen, rennst).    unregel(rennen, rennt).
unregel(rennen, rennen).

unregel(sprechen, spreche). unregel(sprechen, sprichst). unregel(sprechen, spricht).
unregel(sprechen, sprechen). unregel(sprechen, sprecht).

unregel(geben, gebe).  unregel(geben, gibst).  unregel(geben, gibt). 
unregel(geben, geben). unregel(geben, gebt).

unregel(schlafen, schlaeft).


% Praeteritum

praeteritum(sein, war).    praeteritum(sein, warst).  praeteritum(sein, waren).
praeteritum(sein, wart).   praeteritum(sein, waere).  praeteritum(sein, waerest).
praeteritum(sein, waerst). praeteritum(sein, waeren). praeteritum(sein, waeret).
praeteritum(sein, waert).

praeteritum(haben, hatte).   praeteritum(haben, hattest).  
praeteritum(haben, hatten).  praeteritum(haben, hattet).  
praeteritum(haben, haette).  praeteritum(haben, haettest).
praeteritum(haben, haetten). praeteritum(haben, haettet).

praeteritum(werden, wurde).   praeteritum(werden, wurdest).  
praeteritum(werden, wurden).  praeteritum(werden, wurdet).  
praeteritum(werden, wuerde).  praeteritum(werden, wuerdest).
praeteritum(werden, wuerden). praeteritum(werden, wuerdet).

praeteritum(duerfen, durfte).   praeteritum(duerfen, durftest).
praeteritum(duerfen, durften).  praeteritum(duerfen, durftet).
praeteritum(duerfen, duerfte).  praeteritum(duerfen, duerftest).
praeteritum(duerfen, duerften). praeteritum(duerfen, duerftet).

praeteritum(koennen, konnte).   praeteritum(koennen, konntest).
praeteritum(koennen, konnten).  praeteritum(koennen, konntet).
praeteritum(koennen, koennte).  praeteritum(koennen, koenntest).
praeteritum(koennen, koennten). praeteritum(koennen, koenntet).

praeteritum(moegen, mochte).   praeteritum(moegen, mochtest). 
praeteritum(moegen, mochten).  praeteritum(moegen, mochtet).  
praeteritum(moegen, moechte).  praeteritum(moegen, moechtest).
praeteritum(moegen, moechten). praeteritum(moegen, moechtet).

praeteritum(muessen, musste).    praeteritum(muessen, musstest).
praeteritum(muessen, mussten).   praeteritum(muessen, musstet).
praeteritum(muessen, muesste).   praeteritum(muessen, muesstest).
praeteritum(muessen, muessten).  praeteritum(muessen, muesstet).

praeteritum(sollen, sollte).  praeteritum(sollen, solltest). 
praeteritum(sollen, sollten). praeteritum(sollen, solltet).

praeteritum(wollen, wollte).  praeteritum(wollen, wolltest). 
praeteritum(wollen, wollten). praeteritum(wollen, wolltet).

praeteritum(wissen, wusste).   praeteritum(wissen, wusstest). 
praeteritum(wissen, wussten).  praeteritum(wissen, wusstet).  
praeteritum(wissen, wuesste).  praeteritum(wissen, wuesstest).
praeteritum(wissen, wuessten). praeteritum(wissen, wuesstet).

praeteritum(gehen,  ging).


% Partizip

word( partizip, Partizip) :-
  partizip(_,Partizip).

partizip(sein,      seiend).   % Partizip I
partizip(sein,      gewesen).  % Partizip II

partizip(gehen,     gegangen). % Partizip II
partizip(helfen,    geholfen). % Partizip II

partizip(haben,     habend).   % Partizip I
partizip(haben,     gehabt).   % Partizip II
partizip(werden,    werdend).  % Partizip I
partizip(werden,    geworden). % Partizip II
partizip(duerfen,   gedurft).  % Partizip II
partizip(koennen,   gekonnt).  % Partizip II
partizip(moegen,    gemocht).  % Partizip II
partizip(muessen,   gemusst).  % Partizip II
partizip(sollen,    gesollt).  % Partizip II
partizip(wollen,    gewollt).  % Partizip II
partizip(wissen,    gewusst).  % Partizip II
partizip(bringen,   gebracht). % Partizip II
partizip(denken,    gedacht).  % Partizip II
partizip(kennen,    gekannt).  % Partizip II
partizip(rennen,    gerannt).  % Partizip II

partizip(trinken,   getrunken).
partizip(kochen,    gekocht).
partizip(einkaufen, eingekauft).


%% -----------------------------------------------------------------------------
%% Konjunktionalphrase
%% -----------------------------------------------------------------------------

% Regel
rule( chunk,    [ konjp ] ).

rule( konjp,    [ [ konj ], konj ] ).
rule( konjp,    [ konj1, konj2 ] ).


% Lexikon
word( konj, aber).       word( konj, allein).           word( konj, als).
word( konj, auch).       word( konj, anstatt).          word( konj, auf).
word( konj, ausser).
word( konj, bevor).      word( konj, beziehungsweise).  word( konj, bis).
word( konj, da).         word( konj, damit).            word( konj, dass).
word( konj, desto).      word( konj, denn).             word( konj, doch).
word( konj, ehe).        word( konj, entweder).
word( konj, falls).
word( konj, geschweige). word( konj, gleichwie).
word( konj, indem).      word( konj, indes).            word( konj, indessen).
word( konj, insofern).   word( konj, insoweit).         word( konj, inwiefern).
word( konj, inwieweit).
word( konj, je).         word( konj, jedoch).
word( konj, kaum).
word( konj, mehr).
word( konj, nachdem).    word( konj, noch).             word( konj, nicht).
word( konj, nur).
word( konj, ob).         word( konj, obgleich).         word( konj, obschon).
word( konj, obwohl).     word( konj, obzwar).           word( konj, oder).
word( konj, ohne).
word( konj, seit).       word( konj, seitdem).          word( konj, so).
word( konj, sobald).     word( konj, sodass).           word( konj, sofern).
word( konj, solange).    word( konj, solang).           word( konj, sondern).
word( konj, sooft).      word( konj, sosehr).           word( konj, soviel).
word( konj, soweit).     word( konj, sowenig).          word( konj, sowie).
word( konj, sowohl).     word( konj, statt).
word( konj, trotzdem).
word( konj, um).         word( konj, umso).             word( konj, und).
word( konj, waehrend).   word( konj, weder).            word( konj, weil).
word( konj, wenn).       word( konj, wenngleich).       word( konj, wennschon).
word( konj, wie).        word( konj, wiewohl).          word( konj, wo).
word( konj, wohingegen).
word( konj, zu).         word( konj, zumal).

word( konj1, das).       word( konj2, heisst).

%% -----------------------------------------------------------------------------
%% Partikel
%% -----------------------------------------------------------------------------

% Regeln
rule( chunk,   [ [ partikel ], partikel ]).

% Lexikon
word( partikel, aber).          word( partikel, absolut).
word( partikel, allein).        word( partikel, allerdings).
word( partikel, also).          word( partikel, annaehernd).
word( partikel, auch).          word( partikel, ausgerechnet).
word( partikel, ausgesprochen). word( partikel, ausschliesslich).
word( partikel, aeusserst).     word( partikel, aussergewoehnlich).
word( partikel, ausserordentlich).
word( partikel, beinahe).       word( partikel, bereits).
word( partikel, besonders).     word( partikel, bloss).
word( partikel, denn).          word( partikel, direkt).
word( partikel, doch).          word( partikel, durchaus).
word( partikel, eben).          word( partikel, ebenfalls).
word( partikel, ebenso).        word( partikel, echt).
word( partikel, eh).            word( partikel, eigentlich).
word( partikel, einfach).       word( partikel, einigermassen).
word( partikel, einmal).        word( partikel, einzig).
word( partikel, erst).          word( partikel, etwa).
word( partikel, etwas).         word( partikel, extrem).
word( partikel, fast).
word( partikel, ganz).          word( partikel, gar).
word( partikel, genau).         word( partikel, gerade).
word( partikel, geradezu).      word( partikel, gleich).
word( partikel, gleichfalls).
word( partikel, halt).          word( partikel, hoechst).
word( partikel, hoechstens).    word( partikel, huebsch).
word( partikel, immer).         word( partikel, immerhin).
word( partikel, insbesondere).
word( partikel, ja).            word( partikel, jedenfalls).
word( partikel, lediglich).
word( partikel, mal).           word( partikel, man).
word( partikel, mindestens).
word( partikel, nahezu).        word( partikel, nicht).
word( partikel, noch).          word( partikel, nun).
word( partikel, nur).
word( partikel, ohnehin).
word( partikel, recht).         word( partikel, rein).
word( partikel, restlos).       word( partikel, richtig).
word( partikel, ruhig).
word( partikel, schliesslich).  word( partikel, schoen).
word( partikel, schon).         word( partikel, sehr).
word( partikel, selbst).        word( partikel, so).
word( partikel, sogar).         word( partikel, sowieso).
word( partikel, total).
word( partikel, ueberaus).      word( partikel, ueberdies). 
word( partikel, ueberhaupt).    word( partikel, uebermaessig).
word( partikel, uebrigens).     word( partikel, ungefaehr).
word( partikel, ungemein).      word( partikel, ungewoehnlich).
word( partikel, viel).          word( partikel, vielleicht).
word( partikel, voellig).       word( partikel, vollkommen).
word( partikel, vollstaendig).  word( partikel, vornehmlich).
word( partikel, weit).          word( partikel, weitaus).
word( partikel, wenig).         word( partikel, wenigstens).
word( partikel, wesentlich).    word( partikel, wohl).
word( partikel, ziemlich).      word( partikel, zu).
word( partikel, zumal).         word( partikel, zumindest).


% Interjektionspartikel

word( partikel, ach).     word( partikel, aetsch).
word( partikel, aha).     word( partikel, ah).
word( partikel, au).      word( partikel, aua).
word( partikel, autsch).  word( partikel, hurra).
word( partikel, hm).      word( partikel, igitt).
word( partikel, oh).      word( partikel, oje).
word( partikel, pfui).

word( partikel, haha).    word( partikel, hatschi).
word( partikel, hihi).    word( partikel, hehe).
word( partikel, hoho).    word( partikel, kikeriki).
word( partikel, klirr).   word( partikel, miau).
word( partikel, peng).

word( partikel, ciao).    word( partikel, dalli).
word( partikel, hallo).   word( partikel, he).
word( partikel, heda).    word( partikel, hue).
word( partikel, prost).   word( partikel, pst).
word( partikel, servus).  word( partikel, tschues).


%% -----------------------------------------------------------------------------
%% Verschiedenes
%% -----------------------------------------------------------------------------

% Regeln
rule( chunk,    [ separator ] ).

% Lexikon
word( separator, ',' ).  word( separator, ';' ).
word( separator, ':' ).

word( separator, '.' ).  word( separator, '...' ).
word( separator, '?' ).  word( separator, '!' ).

word( separator, '-' ).  word( separator, '/' ).

word( separator, '"' ).

word( separator, '(' ).  word( separator, ')' ).
word( separator, '[' ).  word( separator, ']' ).

%% -----------------------------------------------------------------------------
%% nicht zugeordnete Woerter
%% -----------------------------------------------------------------------------

% Regeln
rule( chunk,    [ unrecognized_word ] ).

% Lexikon
word( unrecognized_word, _ ).
